package com.atguigu.tingshu.album.api;

import com.atguigu.tingshu.album.service.AlbumInfoService;
import com.atguigu.tingshu.common.annotation.GuiGuLogin;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.AlbumStat;
import com.atguigu.tingshu.model.album.BaseAttributeValue;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.simpleframework.xml.Path;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.crypto.spec.OAEPParameterSpec;
import java.util.List;
import java.util.Map;

@Tag(name = "专辑管理")
@RestController
@RequestMapping("api/album/albumInfo")
@SuppressWarnings({"all"})
public class AlbumInfoApiController {

	@Autowired
	private AlbumInfoService albumInfoService;

	//提交专辑接口
	@Operation(summary = "新增专辑")
	@PostMapping ("/saveAlbumInfo")
	public Result saveAlbumInfo(@RequestBody AlbumInfoVo albumInfoVo){
		//TODO 需要用户id  临时添加固定值， 后续完善哦
		Long userId = 1L;
		albumInfoService.saveAlbumInfo(albumInfoVo,userId);
		return Result.ok();
	}
//	//分页查询专辑列表
//	@Operation(summary = "获取当前用户专辑分页列表")
//	@PostMapping("/findUserAlbumPage/{page}/{limit}")
//	public Result<IPage<AlbumListVo>> findUserAlbmPage(@PathVariable(value = "page") Long page,
//										  @PathVariable(value = "limit") Long limit,
//										  @RequestBody AlbumInfoQuery albumInfoQuery){
//		//TODO 暂时写死用户id
//		albumInfoQuery.setUserId(1L);
//		IPage<AlbumListVo> albumInfoQuerieList =  albumInfoService.findUserAlbmPage(page,limit,albumInfoQuery);
//		return Result.ok(albumInfoQuerieList);
//	}
//分页查询专辑列表
	@GuiGuLogin
	@Operation(summary = "获取当前用户专辑分页列表")
	@PostMapping("/findUserAlbumPage/{page}/{limit}")
public Result<IPage<AlbumListVo>> findUserAlbmPage(@PathVariable(value = "page") Long page,
												   @PathVariable(value = "limit") Long limit,
												   @RequestBody AlbumInfoQuery albumInfoQuery){
	//TODO 暂时写死用户id
	albumInfoQuery.setUserId(1L);
	IPage<AlbumListVo> albumInfoQuerieList =  albumInfoService.findUserAlbmPage(new Page<AlbumListVo>(page,limit),albumInfoQuery);
	return Result.ok(albumInfoQuerieList);
}

	//根据专辑id删除专辑
	@Operation(summary = "删除专辑")
	@DeleteMapping("/removeAlbumInfo/{id}")
	public Result removeAlbumInfo(@PathVariable(value = "id") Long id){
		System.out.println(id);
		albumInfoService.removeAlbumInfo(id);
		return Result.ok();
	}

	//修改专辑一: 首先根据专辑id查询数据
	@Operation(summary = "根据专辑id获取专辑数据")
	@GetMapping("/getAlbumInfo/{id}")
	public Result<AlbumInfo> getAlbumInfo(@PathVariable(value = "id") Long id){
		AlbumInfo albumInfo = albumInfoService.getAlbumInfoById(id);
		return Result.ok(albumInfo);
	}

	//修改专辑二: 根据专辑id修改专辑信息
	// 1  修改专辑基本信息  包含名称  封面 简介  分类等
	// 2  专辑选择属性数据（标签） 先删除专辑之前的属性数据 再进行添加
	@Operation(summary = "修改专辑信息")
	@PutMapping("/updateAlbumInfo/{id}")
	public Result updateAlbumInfo(@PathVariable(value = "id") Long id,
								  @RequestBody @Validated AlbumInfoVo albumInfoVo
	){
		//调用服务层方法
		albumInfoService.updateAlbumInfo(id,albumInfoVo);
		return Result.ok();
	}

	//获取当前用户全部专辑列表
	@Operation(summary = "获取当前用户全部专辑列表")
    @GetMapping("/findUserAllAlbumList")
	public Result findUserAllAlbumList(){
		//TODO 暂时写死用户id
		Long userId = 1L;
		List<AlbumInfo> albumInfoList = albumInfoService.findUserAllAlbumList(userId);
	    return Result.ok(albumInfoList);
	}

	//根据专辑id获取专辑属性信息
	@Operation(summary = "获取专辑属性值信息")
	@GetMapping("/findAlbumAttributeValue/{id}")
	public Result findAlbumAttributeValue(@PathVariable(value = "id") Long id){
		List<AlbumAttributeValue> baseAttributeValueList = albumInfoService.findAlbumAttributeValue(id);
	    return Result.ok(baseAttributeValueList);
	}

	//根据专辑id获取四个统计数据
		@Operation(summary = "根据专辑id获取四个专辑统计数据")
		@GetMapping("/getAlbumStat/{albumId}")
		public Result getAlbumStat(@PathVariable(value = "albumId") Long albumId){
		Map<String,Object> map = albumInfoService.getAlbumStat(albumId);
		return Result.ok(map);
		}

		//根据专辑id获取统计信息
		@Operation(summary = "根据专辑id获取统计信息")
		@GetMapping("/getAlbumStatVo/{albumId}")
		public Result getAlbumStatVo(@PathVariable(value = "albumId") Long albumId){
			AlbumStatVo albumStatVo = albumInfoService.getAlbumStatVo(albumId);
			return Result.ok(albumStatVo);
		}
}

